home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
6
/
cl0588.zip
/
DESKTOP.LST
< prev
next >
Wrap
File List
|
1988-05-01
|
26KB
|
497 lines
Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
Author: Kernighan & Ritchie
Clist demonstration using K&R pages 74-79
1/1 /*.t|Clist demonstration using K&R pages 74-79*//*.function .author Kernighan & Ritchie*/
2/2 /* A $2,000 desktop calculator that isn't even programmable! */
3/3 /* This listing produced using the following command line:
4/4 CL -G -H -C -PBI DESKTOP
5/5 */
6/6
7/7 /* .noin Don't include the (long) standard headers */
8/8 #include <stdio.h>
9/9 #include <math.h>
10/10 /* .incl Include the other files */
11/11
12/12 #define MAXOP 20
13/13 #define NUMBER '0'
14/14 #define TOOBIG '9'
15/15
16/16 #include <stack.c>
Page 001 Clist version 05.01.88 on 05/01/88 Include file STACK.C Source file DESKTOP.C
Author: Kernighan & Ritchie
Clist demonstration using K&R pages 74-79
stack routines for the desktop calculator
STACK.C:
17/1 /* .subt | stack routines for the desktop calculator */
18/2
19/3 #define MAXVAL 100
20/4
21/5 EintF sp = 0;
22/6 EdoubleF val[MAXVAL];
23/7
24/8 EdoubleF push(f)
25/9 EdoubleF f;
26/10 ┌─────── {
27/11 │ EifF (sp < MAXVAL)
28/12 │ EreturnF(val[sp++] = f);
29/13 │┌──────── EelseF {
30/14 ││ printf("error: stack full\n");
31/15 ││ clear();
32/16 ││ EreturnF(0.0);
33/17 │└──────── }
34/18 └─────── }
35/19
36/20 EdoubleF pop()
37/21 ┌─────── {
38/22 │ EifF (sp > 0)
39/23 │ EreturnF(val[--sp]);
40/24 │┌──────── EelseF {
41/25 ││ printf("error: stack empty\n");
42/26 ││ clear();
43/27 ││ EreturnF(0.0);
44/28 │└──────── }
45/29 └─────── }
46/30
47/31 clear()
48/32 ┌─────── {
49/33 │ sp = 0;
50/34 └─────── }
51/35
52/36 /* .subt < end of file, stack.c */
53/37
DESKTOP.C:
54/17 #include <getop.c>
Page 002 Clist version 05.01.88 on 05/01/88 Include file GETOP.C Source file DESKTOP.C
Author: Kernighan & Ritchie
Clist demonstration using K&R pages 74-79
Get operation type for desktop calculator
GETOP.C:
55/1 /* .subt |Get operation type for desktop calculator */
56/2
57/3 getop(s,lim)
58/4 EcharF s[];
59/5 EintF lim;
60/6 ┌─────── {
61/7 │ EintF i, c;
62/8 │
63/9 │ EwhileF ((c = getch()) == ' ' || c == '\t' || c == '\n')
64/10 │ ;
65/11 │ EifF (c != '.' && (c < '0' || c > '9'))
66/12 │ EreturnF(c);
67/13 │ s[0] = c;
68/14 │ EforF (i = 1; (c = getchar()) >= '0' && c <= '9'; i++)
69/15 │ EifF (i < lim)
70/16 │ s[i] = c;
71/17 │┌──────── EifF (c == '.') {
72/18 ││ EifF (i < lim)
73/19 ││ s[i] = c;
74/20 ││ EforF (i++; (c = getchar()) >= '0' && c <= '9'; i++)
75/21 ││ EifF (i<lim)
76/22 ││ s[i] = c;
77/23 │└──────── }
78/24 │┌──────── EifF (i < lim) {
79/25 ││ ungetch(c);
80/26 ││ s[i] = '\0';
81/27 ││ EreturnF(NUMBER);
82/28 │└──────── }
83/29 │┌──────── EelseF {
84/30 ││ EwhileF (c != '\n' && c != EOF)
85/31 ││ c = getchar();
86/32 ││ s[lim-1] = '\0';
87/33 ││ EreturnF(TOOBIG);
88/34 │└──────── }
89/35 └─────── }
90/36
91/37 /* .subt < end of file, file getop.c */
92/38
DESKTOP.C:
93/18 #include <getch.c>
Page 003 Clist version 05.01.88 on 05/01/88 Include file GETCH.C Source file DESKTOP.C
Author: Kernighan & Ritchie
Clist demonstration using K&R pages 74-79
Get and save character routines for desktop calculator
GETCH.C:
94/1 /* .subt | Get and save character routines for desktop calculator */
95/2
96/3 #define BUFSIZE 100
97/4
98/5 EcharF buf[BUFSIZE];
99/6 EintF bufp = 0;
100/7
101/8 getch()
102/9 ┌─────── {
103/10 │ EreturnF((bufp > 0) ? buf[--bufp] : getchar());
104/11 └─────── }
105/12
106/13 ungetch(c)
107/14 EintF c;
108/15 ┌─────── {
109/16 │ EifF (bufp > BUFSIZE)
110/17 │ printf("ungetch: too many characters\n");
111/18 │ EelseF
112/19 │ buf[bufp++] = c
113/20 └─────── }
114/21
115/22 /* .subt < end of file, file getch.c */
116/23
DESKTOP.C:
117/19
118/20 main()
119/21 ┌─────── {
120/22 │ EintF type;
121/23 │ EcharF s[MAXOP];
122/24 │ EdoubleF op2, atof(), pop(), push();
123/25 │
124/26 │┌──────── EwhileF ((type = getop(s,maxop)) != EOF) {
125/27 ││
126/28 ││┌───────── EswitchF (type) {
127/29 │││
128/30 │││ EcaseF NUMBER:
129/31 │││ push(atof(s));
130/32 │││ EbreakF;
131/33 │││ EcaseF '+':
132/34 │││ push(pop() + pop());
133/35 │││ EbreakF;
134/36 │││ EcaseF '*':
135/37 │││ push(pop() * pop());
136/38 │││ EbreakF;
137/39 │││ EcaseF '-':
138/40 │││ op2 = pop();
139/41 │││ push(pop() - op2);
140/42 │││ EbreakF;
141/43 │││ EcaseF '/':
142/44 │││ op2 = pop();
143/45 │││ EifF (op2 != 0.0)
144/46 │││ push(pop() / op2);
145/47 │││ EelseF
146/48 │││ printf("Zero divisor popped\n");
Page 004 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
Author: Kernighan & Ritchie function main()
Clist demonstration using K&R pages 74-79
147/49 │││ EbreakF;
148/50 │││ EcaseF '=':
149/51 │││ printf("\t%f\n",push(pop()));
150/52 │││ EbreakF;
151/53 │││ EcaseF 'c':
152/54 │││ clear();
153/55 │││ EbreakF;
154/56 │││ EcaseF TOOBIG:
155/57 │││ printf("%.20s ... is too long\n");
156/58 │││ EbreakF;
157/59 │││ EdefaultF:
158/60 │││ printf("unknown command %c\n",type);
159/61 │││ EbreakF;
160/62 ││└──────── }
161/63 │└────── }
162/64 │
163/65 │ /* end of program, desktop.c */
164/66 │
Page 005 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
Cross-reference listing
Functions
atof(): page 004, line 122; file DESKTOP.C, line 24 in function main()
page 004, line 129; file DESKTOP.C, line 31 in function main()
clear(): page 002, line 31; file STACK.C, line 15 in function push()
page 002, line 42; file STACK.C, line 26 in function pop()
page 002, line 47; file STACK.C, line 31 defined
page 005, line 152; file DESKTOP.C, line 54 in function main()
getch(): page 003, line 63; file GETOP.C, line 9 in function getop()
page 004, line 101; file GETCH.C, line 8 defined
getchar(): page 003, line 68; file GETOP.C, line 14 in function getop()
page 003, line 74; file GETOP.C, line 20 in function getop()
page 003, line 85; file GETOP.C, line 31 in function getop()
page 004, line 103; file GETCH.C, line 10 in function getch()
getop(): page 003, line 57; file GETOP.C, line 3 defined
page 004, line 124; file DESKTOP.C, line 26 in function main()
main(): page 004, line 118; file DESKTOP.C, line 20 defined
pop(): page 002, line 36; file STACK.C, line 20 defined
page 004, line 122; file DESKTOP.C, line 24 in function main()
page 004, line 132; file DESKTOP.C, line 34 in function main()
page 004, line 135; file DESKTOP.C, line 37 in function main()
page 004, line 138; file DESKTOP.C, line 40 in function main()
page 004, line 139; file DESKTOP.C, line 41 in function main()
page 004, line 142; file DESKTOP.C, line 44 in function main()
page 004, line 144; file DESKTOP.C, line 46 in function main()
page 005, line 149; file DESKTOP.C, line 51 in function main()
printf(): page 002, line 30; file STACK.C, line 14 in function push()
page 002, line 41; file STACK.C, line 25 in function pop()
page 004, line 110; file GETCH.C, line 17 in function ungetch()
page 004, line 146; file DESKTOP.C, line 48 in function main()
page 005, line 149; file DESKTOP.C, line 51 in function main()
page 005, line 155; file DESKTOP.C, line 57 in function main()
page 005, line 158; file DESKTOP.C, line 60 in function main()
push(): page 002, line 24; file STACK.C, line 8 defined
page 004, line 122; file DESKTOP.C, line 24 in function main()
page 004, line 129; file DESKTOP.C, line 31 in function main()
page 004, line 132; file DESKTOP.C, line 34 in function main()
page 004, line 135; file DESKTOP.C, line 37 in function main()
page 004, line 139; file DESKTOP.C, line 41 in function main()
page 004, line 144; file DESKTOP.C, line 46 in function main()
page 005, line 149; file DESKTOP.C, line 51 in function main()
ungetch(): page 003, line 79; file GETOP.C, line 25 in function getop()
page 004, line 106; file GETCH.C, line 13 defined
Page 006 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
Cross-reference listing
Variables and Constants
BUFSIZE: page 004, line 96; file GETCH.C, line 3 defined
page 004, line 98; file GETCH.C, line 5 defined
page 004, line 109; file GETCH.C, line 16 in function ungetch()
EOF: page 003, line 84; file GETOP.C, line 30 in function getop()
page 004, line 124; file DESKTOP.C, line 26 in function main()
MAXOP: page 001, line 12; file DESKTOP.C, line 12 defined
page 004, line 121; file DESKTOP.C, line 23 in function main()
MAXVAL: page 002, line 19; file STACK.C, line 3 defined
page 002, line 22; file STACK.C, line 6 defined
page 002, line 27; file STACK.C, line 11 in function push()
NUMBER: page 001, line 13; file DESKTOP.C, line 13 defined
page 003, line 81; file GETOP.C, line 27 in function getop()
page 004, line 128; file DESKTOP.C, line 30 in function main()
TOOBIG: page 001, line 14; file DESKTOP.C, line 14 defined
page 003, line 87; file GETOP.C, line 33 in function getop()
page 005, line 154; file DESKTOP.C, line 56 in function main()
buf: page 004, line 98; file GETCH.C, line 5 defined
page 004, line 103; file GETCH.C, line 10 in function getch()
page 004, line 112; file GETCH.C, line 19 in function ungetch()
bufp: page 004, line 99; file GETCH.C, line 6 defined
page 004, line 103; file GETCH.C, line 10 in function getch()
page 004, line 109; file GETCH.C, line 16 in function ungetch()
page 004, line 112; file GETCH.C, line 19 in function ungetch()
c: page 003, line 61; file GETOP.C, line 7 in function getop()
page 003, line 63; file GETOP.C, line 9 in function getop()
page 003, line 65; file GETOP.C, line 11 in function getop()
page 003, line 66; file GETOP.C, line 12 in function getop()
page 003, line 67; file GETOP.C, line 13 in function getop()
page 003, line 68; file GETOP.C, line 14 in function getop()
page 003, line 70; file GETOP.C, line 16 in function getop()
page 003, line 71; file GETOP.C, line 17 in function getop()
page 003, line 73; file GETOP.C, line 19 in function getop()
page 003, line 74; file GETOP.C, line 20 in function getop()
page 003, line 76; file GETOP.C, line 22 in function getop()
page 003, line 79; file GETOP.C, line 25 in function getop()
page 003, line 84; file GETOP.C, line 30 in function getop()
page 003, line 85; file GETOP.C, line 31 in function getop()
page 004, line 106; file GETCH.C, line 13 defined
page 004, line 107; file GETCH.C, line 14 defined
page 004, line 112; file GETCH.C, line 19 in function ungetch()
f: page 002, line 24; file STACK.C, line 8 defined
page 002, line 25; file STACK.C, line 9 defined
page 002, line 28; file STACK.C, line 12 in function push()
i: page 003, line 61; file GETOP.C, line 7 in function getop()
page 003, line 68; file GETOP.C, line 14 in function getop()
page 003, line 69; file GETOP.C, line 15 in function getop()
page 003, line 70; file GETOP.C, line 16 in function getop()
page 003, line 72; file GETOP.C, line 18 in function getop()
page 003, line 73; file GETOP.C, line 19 in function getop()
page 003, line 74; file GETOP.C, line 20 in function getop()
page 003, line 75; file GETOP.C, line 21 in function getop()
page 003, line 76; file GETOP.C, line 22 in function getop()
page 003, line 78; file GETOP.C, line 24 in function getop()
page 003, line 80; file GETOP.C, line 26 in function getop()
lim: page 003, line 57; file GETOP.C, line 3 defined
page 003, line 59; file GETOP.C, line 5 defined
page 003, line 69; file GETOP.C, line 15 in function getop()
Page 007 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
Cross-reference listing
Variables and Constants - "lim" cont'd
page 003, line 72; file GETOP.C, line 18 in function getop()
page 003, line 75; file GETOP.C, line 21 in function getop()
page 003, line 78; file GETOP.C, line 24 in function getop()
page 003, line 86; file GETOP.C, line 32 in function getop()
maxop: page 004, line 124; file DESKTOP.C, line 26 in function main()
op2: page 004, line 122; file DESKTOP.C, line 24 in function main()
page 004, line 138; file DESKTOP.C, line 40 in function main()
page 004, line 139; file DESKTOP.C, line 41 in function main()
page 004, line 142; file DESKTOP.C, line 44 in function main()
page 004, line 143; file DESKTOP.C, line 45 in function main()
page 004, line 144; file DESKTOP.C, line 46 in function main()
s: page 003, line 57; file GETOP.C, line 3 defined
page 003, line 58; file GETOP.C, line 4 defined
page 003, line 67; file GETOP.C, line 13 in function getop()
page 003, line 70; file GETOP.C, line 16 in function getop()
page 003, line 73; file GETOP.C, line 19 in function getop()
page 003, line 76; file GETOP.C, line 22 in function getop()
page 003, line 80; file GETOP.C, line 26 in function getop()
page 003, line 86; file GETOP.C, line 32 in function getop()
page 004, line 121; file DESKTOP.C, line 23 in function main()
page 004, line 124; file DESKTOP.C, line 26 in function main()
page 004, line 129; file DESKTOP.C, line 31 in function main()
sp: page 002, line 21; file STACK.C, line 5 defined
page 002, line 27; file STACK.C, line 11 in function push()
page 002, line 28; file STACK.C, line 12 in function push()
page 002, line 38; file STACK.C, line 22 in function pop()
page 002, line 39; file STACK.C, line 23 in function pop()
page 002, line 49; file STACK.C, line 33 in function clear()
type: page 004, line 120; file DESKTOP.C, line 22 in function main()
page 004, line 124; file DESKTOP.C, line 26 in function main()
page 004, line 126; file DESKTOP.C, line 28 in function main()
page 005, line 158; file DESKTOP.C, line 60 in function main()
val: page 002, line 22; file STACK.C, line 6 defined
page 002, line 28; file STACK.C, line 12 in function push()
page 002, line 39; file STACK.C, line 23 in function pop()
Page 008@